package pe.edu.sisclas.model.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.sisclas.model.dao.IncidenciaDao;
import pe.edu.sisclas.model.dao.exception.DaoException;
import pe.edu.sisclas.model.domain.Incidencia;
import pe.edu.sisclas.model.service.IncidenciaService;
import pe.edu.sisclas.model.service.exception.ServiceException;

@Service("incidenciaService")
public class IncidenciaServiceImpl implements IncidenciaService {

	@Autowired
	private IncidenciaDao incidenciaDao;

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public List<Incidencia> listarIncidencias() throws ServiceException {
		try {
			List<Incidencia> incidencias = incidenciaDao.getAll();
			return incidencias;
		} catch (DaoException de) {
			throw ServiceException.mensaje("Error en la carga de incidencias.");
		}
	}
	
	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public void guardarIncidencia(Incidencia incidencia) throws ServiceException {
		try{
			incidenciaDao.save(incidencia);
		}catch(DaoException de){
			de.printStackTrace();
			throw ServiceException.mensaje("Error al guardar");
		}
		
	}
	
	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public void ActualizarIncidencia(String titulo, char nuevoEstado) throws ServiceException {
		try{
			incidenciaDao.UpdateIncidencia(titulo, nuevoEstado);
		}catch(DaoException de){
			System.out.println(de.getMessage());
			de.printStackTrace();
			throw ServiceException.mensaje("Error al guardar");
		}
	}
	
	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public List<Incidencia>listarPorTitulo(String title)throws ServiceException{
		try {
			List<Incidencia> incidencias = incidenciaDao.getByTitle(title);
			return incidencias;
		} catch (DaoException de) {
			throw ServiceException.mensaje("Error en la carga de incidencias.");
		} 
	}
	
	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	public List<Incidencia>listarPorFiltro(Incidencia incidencia,
			boolean frecuentes, boolean comentados)throws ServiceException{
		
		try {
			List<Incidencia> incidencias = incidenciaDao.getByFields(incidencia, frecuentes, comentados);
			return incidencias;
		} catch (DaoException de) {
			throw ServiceException.mensaje("Error en la carga de incidencias.");
		} 
	
	}
	
	

}
